<?php
/**     
  *
  * Copyright (c) 2009, Persistent Systems Limited
  *
  * Redistribution and use, with or without modification, are permitted 
  *  provided that the following  conditions are met:
  *   - Redistributions of source code must retain the above copyright notice, 
  *     this list of conditions and the following disclaimer.
  *   - Neither the name of Persistent Systems Limited nor the names of its contributors 
  *     may be used to endorse or promote products derived from this software 
  *     without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
  
/**
  *
  * This file contains the definition of RelatedEnd Class
  */
  
/**
  * The RelatedEnd Class.
  * Used to hold a binding in the context
  */

class RelatedEnd extends Entity
{
    /**
     * Holding the source of object of binding
     */
    protected $_sourceResource;
    
    /**
     * Holding the source property in Source Object
     */     
    protected $_sourceProperty;
    
    /**
     * Holding the target of object of binding
     */
    protected $_targetResource;
    
    /**
     * @Returns <Object> 
     * Get method for source object
     */
    public function GetSourceResource()
    {
        return $this->_sourceResource;		
    }
    
    /**
     * @Returns <string> 
     * Get method for source property
     */
    public function GetSourceProperty()
    {
        return $this->_sourceProperty;
    }
    
    /**
     * @Returns <Object> 
     * Get method for Target object
     */
    public function GetTargetResource()
    {
        return $this->_targetResource;
    }
    
    /**
     * @param <Object> $sourceResource
     * @param <string> $sourceProperty
     * @param <Object> $targetResource
     * Constructs a new RelatedEnd Object
     */
    public function RelatedEnd($sourceResource, $sourceProperty, $targetResource)
    {
        $this->_sourceResource = $sourceResource;
        $this->_sourceProperty = $sourceProperty;
        $this->_targetResource = $targetResource;
    }
    
    /**
     * @Returns FALSE always
     */
    public function IsResource()
    {
        return FALSE;
    }    
    
    /**
     * @param <RelatedEnd> $relatedEnd1
     * @param <RelatedEnd> $relatedEnd2
     * @Return <bool> if both ends are equal else false     
     */
    public static function Equals($relatedEnd1, $relatedEnd2)
    {
        if (($relatedEnd1->GetSourceResource()->getObjectID() == $relatedEnd2->GetSourceResource()->getObjectID()) &&
            ($relatedEnd1->GetTargetResource()->getObjectID() == $relatedEnd2->GetTargetResource()->getObjectID()) &&
            ($relatedEnd1->GetSourceProperty() == $relatedEnd2->GetSourceProperty()))
            {
                return TRUE;
            }
        return FALSE;
    }
    
    /**
     * @Returns <UniqueID>
     * Returns unique id associated with this RelatedEnd
     */
    public function getObjectID()
    {
        return $this->_sourceResource->getObjectID() . "_" . $this->_sourceProperty . "_" . $this->_targetResource->getObjectID(); 
    }   
}
?>